package com.pangu.message;

import com.pangu.message.constant.MessageCategory;
import com.pangu.message.constant.MessageType;

import java.util.Map;

/**
 * @author Linbizhao
 * @description: 消息体
 * @since 2023/11/23 15:49
 */
public interface Message extends Jsonable {

    /**
     * 消息大类
     *
     * @return the message command type
     */
    default MessageCategory getCategory() {
        return getType().getCategory();
    }

    /**
     * 消息小类
     *
     * @return the type
     */
    default MessageType getType() {
        return MessageType.UNKNOWN;
    }

    /**
     * 设备唯一编码
     *
     * @return the unique code
     */
    String getUniqueCode();

    /**
     * 消息时间戳
     *
     * @return the timestamp
     */
    long getTimestamp();

    /**
     * 消息数据/属性
     *
     * @return the data
     */
    Map<String, Object> getData();

    /**
     * 消息头部参数
     *
     * @return the map
     */
    Map<String, Object> getHeaders();

    /**
     * Add header message.
     *
     * @param header the header
     * @param value  the value
     * @return the message
     */
    Message addHeader(String header, Object value);

    /**
     * Remove header message.
     *
     * @param header the header
     * @return the message
     */
    Message removeHeader(String header);
}
